前言与概述

之前我们在B07【多链路问题】生成树协议之MSTP与其他技术概要 | Magiku’s药剂屋略微提及了交换设备上的“堆叠与集群”概念;

今天我们来介绍在路由设备上的同类型技术——VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)。

该技术是通过配置一个设备IP与MAC用作“聚合”后的“虚拟路由器”的IP与MAC地址,最终让终端设备使用该IP地址作为网关,来达到网关冗余的目的。

如图:

  • 局域网中有两个路由器R1和R2,R1端口IP地址为192.168.1.251/24,R2端口IP地址为192.168.1.252/24。
  • 配置R1和R2关联到同一个虚拟路由器,该虚拟路由器使用192.168.1.254做为端口IP地址。
  • 所有的PC使用192.168.1.254做为默认网关。

原理与过程

简单来说,配置VRRP后,路由设备之间会选举出主路由器负责通信,同时主路由器会周期性的发布VRRP报文以让其他路由器知晓主路由器网络通信正常(默认1秒一发)。

假如出现了故障,其他的路由器在一定时间(默认3秒)没有收到主路由器的报文,就会认为主路由器通信异常,于是开始选举出新的主路由器承接业务通信。

基本概念

VRID:

  • 虚拟路由器的标识。

VRRP组虚拟路由器的IP地址:

  • 人工手动配置。

VRRP组虚拟路由器的MAC地址:

  • 格式为:00-00-5E-00-01-XX,XX为VRRP组的ID号。

  • 假设RouterA和RouterB组成的虚拟路由器的VRID为1,则这个VRRP备份组的MAC地址为00-00-5E-00-01-01。

Priority:

  • 优先级,用于选举主路由器,配置范围为1-254,默认为100。

  • 如果设定的虚拟路由器的IP地址为某一台路由器本身的IP地址,则该路由器的VRRP优先级固定为255,绝对优先。

  • 如果一台设备要退出VRRP组,则会先将优先级自动设置为0,用于表示即将退出VRRP组,使备份设备尽快成为Master设备,而不必等到定时器超时。

通告时间间隔定时器(Advertisement Interval):

  • VRRP备份组中的主路由器会定时发送VRRP通告报文,通知备份组内的路由器自己工作正常。
  • 用户可以通过设置VRRP定时器来调整Master路由器发送VRRP通告报文的时间间隔。默认值为1秒。

主用失效时间间隔定时器(Master Down Interval):

  • 如果备用路由器在等待了3个间隔时间后,依然没有收到VRRP通告报文,则认为原主路由器故障了,那么自己就是Master路由器。
  • 备用路由器并不会立即抢占成为主路由器,而是等待一定时间(时滞时间)后,才会对外发送VRRP通告报文取代原来的Master路由器。
  • 因此该定时器值 = 3 × 通告时间间隔 + (256 - 优先级)/256秒。

时滞时间定时器(Skew time):

  • 该定时器的目的是用于排除网络延迟/网络波动导致的小部分延时可能,保证确实是等了三次,主路由器都还是没动静。

  • 该值的计算方式为(256 - 优先级)/256,单位为秒。也就是说,一般只有零点几秒。

VRRP状态机:

  • VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。
  • 初始状态(Initialize)为VRRP不可用状态,在此状态时设备不会对VRRP报文做任何处理。
  • 活动状态(Master)表示该路由器通过选举成为主路由器。
  • 备份状态(Backup)表示该路由器未选举未主路由器,作为备用路由器。

工作过程

VRRP的工作过程如下:

  1. VRRP备份组中的设备根据优先级选举出Master。Master设备通过发送免费ARP报文,将虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务。
  2. Master设备周期性向备份组内所有Backup设备发送VRRP通告报文,以公布其配置信息(优先级等)和工作状况。
  3. 如果Master设备出现故障,VRRP备份组中的Backup设备将根据优先级重新选举新的Master。
  4. VRRP备份组状态切换时,Master设备由一台设备切换为另外一台设备,新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的主机或设备中的MAC表项(主要是刷新交换机的MAC地址表),从而把用户流量引到新的Master设备上来,整个过程对用户完全透明。
  5. 原Master设备故障恢复时,若该设备为IP地址拥有者(优先级为255),将直接切换至Master状态。若该设备优先级小于255,将首先切换至Backup状态,且其优先级恢复为故障前配置的优先级(转到步骤6)。
  6. Backup设备的优先级高于Master设备时,由Backup设备的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
    • 抢占模式:在抢占模式下,如果Backup设备的优先级比当前Master设备的优先级高,则主动将自己切换成Master。
    • 非抢占模式:在非抢占模式下,只要Master设备没有出现故障,Backup设备即使随后被配置了更高的优先级也不会成为Master设备。

负载分担

一个VRRP组,只有一台设备(主路由器)负载通信,这很浪费,我们希望备用路由器不闲着。

就可以多配置一个VRRP组,同时通过配置优先级使得前一个VRRP组中的备用路由器成为这个新VRRP组的主路由器。

然后为部分终端设备修改其网关IP地址为新VRRP组的虚拟路由器的IP地址。

这样就实现了“负载分担”。

VRRP报文

VRRP协议报文封装在IP报文中,发送到分配给VRRP的IP组播地址。

在IP报文头中,源地址为发送报文接口的主IP地址(不是虚拟IP地址),目的地址是224.0.0.18,TTL是255,协议号是112。

VRRP只有一种类型的报文,其完整格式如下:

VRRP报文字段含义如下:

  • Ver:VRRP目前有两个版本,其中VRRPv2仅适用于IPv4网络,VRRPv3适用于IPv4和IPv6两种网络。
  • Type:VRRP通告报文的类型,取值恒为1。
  • Virtual Rtr ID(VRID):该报文所关联的虚拟路由器的标识。
  • Priority:发送该报文的VRRP路由器的优先级。
  • Count IP Addrs:该VRRP报文中所包含的虚拟IP地址的数量。
  • Auth Type:VRRP支持三种认证类型:不认证、纯文本密码认证、MD5方式认证,对应值分别为0、1、2。
  • Adver Int:发送VRRP通告消息的间隔。默认为1秒
  • IP Address:所关联的虚拟路由器的虚拟IP地址,可以为多个。
  • Authentication Data:验证所需要的密码信息。

配置

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入接口视图。

  3. 执行命令vrrp vrid virtual-router-id virtual-ip virtual-address,创建VRRP备份组并给备份组配置虚拟IP地址。

  4. 执行命令vrrp vrid virtual-router-id priority priority-value,配置路由器在备份组中的优先级。

    默认情况下,优先级的取值是100。数值越大,优先级越高。

  5. (可选)执行命令vrrp vrid virtual-router-id preempt-mode timer delay delay-value,配置备份组中路由器的抢占延迟时间。

    默认情况下,抢占延迟时间为0,即立即抢占。

    立即抢占方式下,Backup设备一旦发现自己的优先级比当前的Master的优先级高,就会抢占成为Master。

    在配置VRRP备份组内各路由器的延迟方式时,建议Backup设备配置为立即抢占,Master设备配置为指定时间延时抢占。

    这样配置的目的是为了在网络环境不稳定时,避免出现双Master设备或由于主备双方频繁抢占导致通信异常。

  6. (可选)执行命令vrrp vrid virtual-router-id preempt-mode disable,设置备份组中路由器采用非抢占方式。

    在非抢占方式下,一旦备份组中的某台路由器成为Master,只要它没有出现故障,其它路由器即使随后被配置更高的优先级也不会成为Master。

  7. (可选)执行命令vrrp vrid virtual-router-id authentication-mode { simple { key | plain key | cipher cipher-key } | md5 md5-key },配置VRRP报文认证方式。

    默认为无认证。可配置认证以加强网络安全。

案例

基础配置与多网关负载分担

如图所示,R1与R2组成两个VRRP组:

组1的ip为10.1.12.254,主路由器为R1,用作PC1的网关。

组2的ip为10.1.12.253,主路由器为R2,用作PC2的网关。

配置全网通

首先配置三台路由器的接口ip:

1
2
3
4
5
6
7
8
<Huawei>system-view 
[Huawei]sysname R0
[R0]interface G0/0/0
[R0-GigabitEthernet0/0/0]IP address 192.168.1.254 24
[R0-GigabitEthernet0/0/0]Q
[R0]interface G0/0/1
[R0-GigabitEthernet0/0/1]IP address 192.168.2.254 24
[R0-GigabitEthernet0/0/1]Q
1
2
3
4
5
6
7
8
<Huawei>system-view 
[Huawei]sysname R1
[R1]interface G0/0/0
[R1-GigabitEthernet0/0/0]IP address 192.168.1.1 24
[R1-GigabitEthernet0/0/0]Q
[R1]interface G0/0/1
[R1-GigabitEthernet0/0/1]IP address 10.1.12.251 24
[R1-GigabitEthernet0/0/1]Q
1
2
3
4
5
6
7
8
<Huawei>system-view 
[Huawei]sysname R2
[R2]interface G0/0/0
[R2-GigabitEthernet0/0/0]IP address 192.168.2.1 24
[R2-GigabitEthernet0/0/0]Q
[R2]interface G0/0/1
[R2-GigabitEthernet0/0/1]IP address 10.1.12.252 24
[R2-GigabitEthernet0/0/1]Q

接着配置R0指向另一个网段的静态路由:

1
2
[R0]ip route-static 10.1.12.0 24 192.168.1.1
[R0]ip route-static 10.1.12.0 24 192.168.2.1

配置R1与R2的默认路由:

1
[R1]ip route-static 0.0.0.0 0 192.168.1.254
1
[R2]ip route-static 0.0.0.0 0 192.168.2.254

配置VRRP

1
2
3
4
5
6
7
[R1]interface g0/0/1
#创建VRRP备份组1,配置优先级为200,抢占延时为10秒
[R1-GigabitEthernet0/0/1]vrrp vrid 1 virtual-ip 10.1.12.254
[R1-GigabitEthernet0/0/1]vrrp vrid 1 priority 200
[R1-GigabitEthernet0/0/1]vrrp vrid 1 preempt-mode timer delay 10
#创建VRRP备份组2,其他参数保持默认
[R1-GigabitEthernet0/0/1]vrrp vrid 2 virtual-ip 10.1.12.253
1
2
3
4
5
6
7
[R2]interface g0/0/1
#创建VRRP备份组1,其他参数保持默认
[R2-GigabitEthernet0/0/1]vrrp vrid 1 virtual-ip 10.1.12.254
#创建VRRP备份组2,配置优先级为200,抢占延时为10秒
[R2-GigabitEthernet0/0/1]vrrp vrid 2 virtual-ip 10.1.12.253
[R2-GigabitEthernet0/0/1]vrrp vrid 2 priority 200
[R2-GigabitEthernet0/0/1]vrrp vrid 2 preempt-mode timer delay 10

在R1上执行命令display vrrp,可以看到在备份组1中为Master设备,在备份组2中为Backup设备。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[R1]display vrrp
GigabitEthernet0/0/1 | Virtual Router 1
State : Master
Virtual IP : 10.1.12.254
Master IP : 10.1.12.251
PriorityRun : 200
PriorityConfig : 200
MasterPriority : 200
Preempt : YES Delay Time : 10 s
TimerRun : 1 s
TimerConfig : 1 s
Auth type : NONE
Virtual MAC : 0000-5e00-0101
Check TTL : YES
Config type : normal-vrrp
Backup-forward : disabled
Create time : 2024-08-12 15:00:12 UTC-08:00
Last change time : 2024-08-12 15:00:16 UTC-08:00

GigabitEthernet0/0/1 | Virtual Router 2
State : Backup
Virtual IP : 10.1.12.253
Master IP : 10.1.12.252
PriorityRun : 100
PriorityConfig : 100
MasterPriority : 200
Preempt : YES Delay Time : 0 s
TimerRun : 1 s
TimerConfig : 1 s
Auth type : NONE
Virtual MAC : 0000-5e00-0102
Check TTL : YES
Config type : normal-vrrp
Backup-forward : disabled
Create time : 2024-08-12 15:04:10 UTC-08:00
Last change time : 2024-08-12 15:05:19 UTC-08:00

配置VRRP监视上行接口

如果故障点为上行接口,这不影响VRRP报文的周期性发布,也就是实际终端设备已经无法通过R1与上端的R0甚至是互联网通信;

但由于VRRP未检测到故障,因此VRRP组1依旧保持R1为主路由器。

为了解决这种情景,VRRP支持监视上行接口来自动修改优先级,以“退位让贤”,让主备切换。

  • 执行命令vrrp vrid virtual-router-id track interface interface-type interface-number [ increased value-increased | reduced value-decreased ],配置设备当检测到上行接口或链路出现故障时,增加或者减少自身优先级,IP地址拥有者和Eth-trunk成员口不允许配置VRRP监视功能。

在该拓扑下,我们可以这么配置:

1
2
3
#配置R1,检测到g0/0/0接口down了之后,减少其在VRRP组1内的优先级120点。
[R1]interface g0/0/1
[R1-GigabitEthernet0/0/1]vrrp vrid 1 track interface g0/0/0 reduced 120
1
2
3
reduced#配置R2,检测到g0/0/0接口down了之后,减少其在VRRP组2内的优先级120点。
[R2]interface g0/0/1
[R2-GigabitEthernet0/0/1]vrrp vrid 2 track interface g0/0/0 reduced 120

配置完毕之后,我们手动断开R0与R1之间的链路,再检查一下R1的vrrp信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[R1]display vrrp
GigabitEthernet0/0/1 | Virtual Router 1
State : Backup
Virtual IP : 10.1.12.254
Master IP : 10.1.12.252
PriorityRun : 80
PriorityConfig : 200
MasterPriority : 100
Preempt : YES Delay Time : 10 s
TimerRun : 1 s
TimerConfig : 1 s
Auth type : NONE
Virtual MAC : 0000-5e00-0101
Check TTL : YES
Config type : normal-vrrp
Backup-forward : disabled
Track IF : GigabitEthernet0/0/0 Priority reduced : 120
IF state : DOWN
Create time : 2024-08-12 15:00:12 UTC-08:00
Last change time : 2024-08-12 15:38:16 UTC-08:00

GigabitEthernet0/0/1 | Virtual Router 2
State : Backup
Virtual IP : 10.1.12.253
Master IP : 10.1.12.252
PriorityRun : 100
PriorityConfig : 100
MasterPriority : 200
Preempt : YES Delay Time : 0 s
TimerRun : 1 s
TimerConfig : 1 s
Auth type : NONE
Virtual MAC : 0000-5e00-0102
Check TTL : YES
Config type : normal-vrrp
Backup-forward : disabled
Create time : 2024-08-12 15:04:10 UTC-08:00
Last change time : 2024-08-12 15:05:19 UTC-08:00

可以看到组1中:

  • State : Backup——R1为备用路由器
  • PriorityRun : 80——R1当前优先级为80
  • PriorityConfig : 200——R1配置的优先级为200

VRRP联动BFD、NQA

VRRP也可以与BFD会话进行联动,与配置监视接口类似:

首先建立好BFD会话,接着执行命令vrrp vrid virtual-router-id track bfd-session session-name [ increased value-increased | reduced value-decreased ],配置设备当检测到BFD会话断开时,增加或者减少自身优先级。

另外,也可以使用NQA检测链路状态实现类似的功能,配置方式也类似。

以上配置就不专门举例了。

VRRP+MSTP组网

目前大多数园区/企业网都是采用MSTP作为二层防环以及负载分担的手段。

而vlan我们又都是配置vlanif接口作为网关,让vlan下终端进行三层通信的。

那么处于冗余备份与负载分担的考虑,我们可以在配置vlanif的汇聚交换机上配置VRRP,让vlanif接口也保持冗余,同时配合MSTP进行主备负载分担。

如图所示,配置两个MSTP实例,实例10负责vlan11-20,实例20负责vlan21-30。

然后让SW1成为实例10的主根,SW2成为实例20的主根。

之后各在SW1与SW2上创建vlanif11、vlanif12、vlanif13….vlanif30共20个vlanif接口。

之后在创建20个VRRP组,通过修改优先级,实现vlan11-vlan20的三层流量通过SW1,vlan21-vlan30的三层流量通过SW2。

这样一来MSTP负责二层流量,VRRP负责三层流量,都实现了同样的主备要求与负载分担。

因为要一个一个配置,因此本文就不演示了。